package com.example.demo.controller;

import com.example.demo.common.AppVariable;
import com.example.demo.common.PasswordUtils;
import com.example.demo.common.ResultAjax;
import com.example.demo.model.Userinfo;
import com.example.demo.model.vo.UserinfoVo;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;


/**
 * 注册功能
 */

//@RestController 是@ResponseBody和@Controller的组合注解
@Controller
@ResponseBody
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/reg")
    public ResultAjax reg(Userinfo userinfo) {
        // 1、效验参数
        // StringUtils.hasLength 验证数据不为空，可以查看源码
        if (userinfo == null || !StringUtils.hasLength(userinfo.getUsername()) ||
        !StringUtils.hasLength(userinfo.getPassword())) {
            // 参数异常
            return ResultAjax.fail(-1,"非法参数");
        }
        // 密码加盐
        userinfo.setPassword(PasswordUtils.encrypt(userinfo.getPassword()));
        // 2、请求 Service 进行添加操作,
        int result = userService.reg(userinfo);
        // 3、将执行的结果返回给前端
        return ResultAjax.succ(result);
    }

    /**
     * 登录接口
     */
    @RequestMapping("/login")
    public ResultAjax login(UserinfoVo userinfoVo , HttpServletRequest request) {
        // 1、参数效验
        if (userinfoVo == null || !StringUtils.hasLength(userinfoVo.getUsername()) ||
                !StringUtils.hasLength(userinfoVo.getPassword())) {
            // 非法登录
            return ResultAjax.fail(-1,"非法参数！！");
        }
        // 2、根据用户名查询（已经设置为唯一约束）
        Userinfo userinfo = userService.getUserByName(userinfoVo.getUsername());
        if (userinfo == null || userinfo.getId() == 0) {
            // 不存在此用户
            return ResultAjax.fail(-2,"用户名或者密码错误！");
        }
        // 3、使用对象输入的密码和用户输入的密码进行比较
        // !userinfoVo.getPassword().equals(userinfo.getPassword())
        // 加盐解密
        if (!PasswordUtils.decrypt(userinfoVo.getPassword(),userinfo.getPassword())) {
            // 密码不正确
            return ResultAjax.fail(-2,"用户名或者密码错误！");
        }
        // 4、成功之后将对象存储到session中
        HttpSession session = request.getSession();
        session.setAttribute(AppVariable.SESSION_USERINFO_KEY,userinfo);
        // 5、将结果返回给用户
        return ResultAjax.succ(1);

    }

    /**
     * 退出登录功能
     */
    @RequestMapping("/logout")
    public ResultAjax logout(HttpServletRequest request) {
        HttpSession session = request.getSession(false);
        if (session != null &&
                session.getAttribute(AppVariable.SESSION_USERINFO_KEY) != null) {
            session.removeAttribute(AppVariable.SESSION_USERINFO_KEY);
        }
        return ResultAjax.succ(1);
    }

}
